package org.example.course;

/**
 * @author ZerlindaLi create at 2021/4/2 15:44
 * @version 1.0.0
 * @description AbstractCourse
 * 发布预习资料->制作课件PPT->在线直播->提交课堂笔记->提交源码->布置作业->检查作业
 *
 */
public abstract class AbstractCourse {

    public final void createCourse() {
        // 1. 发布预习资料
        postPreResource();
        // 2. 制作课件PPT
        createPPT();
        // 3. 在线直播
        liveVideo();
        // 4. 上传课后资料
        postResource();
        // 5. 布置作业
        postHomework();
        // 6. 检查作业
        if(needCheckHomework()) {
            checkHomework();
        }
    }

    protected abstract void checkHomework();

    /**
     * 钩子方法
     * @return
     */
    protected boolean needCheckHomework() {
        return false;
    }

    protected void postPreResource() {
        System.out.println("发布预习资料");
    }

    protected void createPPT() {
        System.out.println("制作课件PPT");
    }

    protected void liveVideo() {
        System.out.println("在线直播");
    }

    protected void postResource() {
        System.out.println("布置作业");
    }

    protected void postHomework() {
        System.out.println("上传课后资料");
    }


}
